﻿//namespace OneWorks.Repositories.EntityFramework
//{
//    using System.Data.Entity;
//    using System.Threading;
//    using Interface;

//    public class EntityFrameworkRepositoryContext : RepositoryContext, IEntityFrameworkRepositoryContext
//    {
//        private readonly ThreadLocal<DataContext> _localCtx = new ThreadLocal<OneWorksContext>(() => new OneWorksContext());

//        public override void RegisterDeleted<TAggregateRoot>(TAggregateRoot obj)
//        {
//            _localCtx.Value.Set<TAggregateRoot>().Remove(obj);
//            Committed = false;
//        }

//        public override void RegisterModified<TAggregateRoot>(TAggregateRoot obj)
//        {
//            _localCtx.Value.Entry(obj).State = EntityState.Modified;
//            Committed = false;
//        }

//        public override void RegisterNew<TAggregateRoot>(TAggregateRoot obj)
//        {
//            _localCtx.Value.Set<TAggregateRoot>().Add(obj);
//            Committed = false;
//        }

//        public override bool DistributedTransactionSupported
//        {
//            get { return true; }
//        }

//        public override void Rollback()
//        {
//            Committed = false;
//        }

//        protected override int DoCommit()
//        {
//            if (Committed) return 0;
//            _localCtx.Value.GetValidationErrors();
//            int r =  _localCtx.Value.SaveChanges();
//            Committed = true;
//            return r;
//        }

//        protected override void Dispose(bool disposing)
//        {
//            if (!disposing) return;
//            if (!Committed)
//                Commit();
//            _localCtx.Value.Dispose();
//            _localCtx.Dispose();
//            base.Dispose(true);
//        }

//        #region IEntityFrameworkRepositoryContext Members

//        public DbContext Context
//        {
//            get { return _localCtx.Value; }
//        }

//        #endregion
//    }
//}
